package com.sky.service;

import com.sky.dto.DepartmentAddDTO;
import com.sky.dto.common.PageRequest;
import com.sky.dto.common.ParamsID;
import com.sky.dto.common.ParamsStatus;
import com.sky.dto.common.QueryParams;
import com.sky.entity.Department;
import com.sky.result.PageResult;

import java.util.List;

public interface DepartmentService {

    /**
     * 根据部门id查询此部门下所有的
     * @param id 部门id
     * @return
     */
    List<Department> getDepartmentsById(String id,Integer deep);

    /**新增部门*/
    void addDepartment(DepartmentAddDTO departmentAddDTO);

    void deleteDepartment(ParamsID id);

    /**
     * 更新部门数据
     * @param department
     */
    void updateDepartment(Department department);

    PageResult getAllDepartments(PageRequest<QueryParams> queryParams);

    /**
     * 传递部门id，获取此部门下所有的子部门id
     * @param id
     * @param deep 是否深度查询 0 否， 1 是
     * @return
     */
    List<String> getDepartmentIdsById(String id, Integer deep);

    /**
     * 根据部门id构造完整部门名称 xx-xx-xx
     * @param id 部门id
     * @return
     */
    String buildDepartmentPath(String id);

    /**
     * 获取所有部门列表
     * @param queryParams
     * @return 返回list集合
     */
    List<Department> getAllDepartmentsList(QueryParams queryParams);

    /**
     * 解析部门过滤条件
     * @param queryParams
     */
    void resolveDepartmentFilter(QueryParams queryParams);

    List<Department> getDepartmentPrent();

    /**
     * 修改部门状态- 包括下属的不部门启用的一个状态
     * @param paramsStatus
     */
    void updateDepartmentStatus(ParamsStatus paramsStatus);
}
